package com.totoro.project.analysis ;

import java.io.InputStream ;
import java.util.Map ;

/**
 * 类似策略模式 
 * @author 80002165
 * @date 2017年2月22日 下午6:50:14
 */
public class AnalysisContext {
    private String[] allowAnalysisFile = { "properties", "xml" } ;
    private IAnalysis analysis ;
    /**
     * 根据文件名选择解析文件类的方法
     * 
     * @author 80002165
     * @date 2017年2月22日 下午6:15:45
     * @param fileName
     * @return
     */
    
    public AnalysisContext(String fileName){
        analysis = getAnalysis(fileName) ;
    }
    
    private IAnalysis getAnalysis(String fileName) {
        if (fileName == null)
            throw new IllegalArgumentException("文件名" + fileName + "不合法") ;
        if (fileName.endsWith("properties")) {
            return new AnalysisPropertiesImpl() ;
        } else if (fileName.endsWith("xml")) {
            return new AnalysisXmlImpl() ;
        }
        throw new IllegalArgumentException("暂时不支持解析该文件：" + fileName) ;
    }
    
    enum AllowExtension {
        PROPERTIES {
            @Override
            protected IAnalysis getAnalysis() {
                return new AnalysisPropertiesImpl() ;
            }
        },
        XML {
            @Override
            protected IAnalysis getAnalysis() {
                
                return new AnalysisXmlImpl() ;
            }
        } ;
        protected abstract IAnalysis getAnalysis() ;
    }
    
    public Map<String, String> getEnvironmentKV(InputStream is){
        return analysis.getEnvironmentKV(is) ;
    }
}
